#!/usr/bin/env node
import fs from 'fs';
import path from 'path';

// 递归删除文件夹及其内部文件
const deleteFolderRecursive = (dir) => {
  // 如果文件夹不存在，则直接返回
  if (!fs.existsSync(dir)) return;

  // 读取文件夹中的所有文件和文件夹
  fs.readdirSync(dir).forEach((file) => {
    // 获取当前文件的绝对路径
    const curPath = path.join(dir, file);

    // 如果是文件夹，则递归删除
    if (fs.lstatSync(curPath).isDirectory()) {
      deleteFolderRecursive(curPath);
    } else {
      try {
        fs.unlinkSync(curPath);
      } catch (e) {
        const error = e;
        if (error.code === 'EBUSY' || error.code === 'EPERM') {
          console.log(`无法删除文件：${curPath}，可能被占用或没有访问权限`);
        }
      }
    }
  });

  try {
    fs.rmdirSync(dir);
  } catch (e) {
    const error = e;
    if (error.code === 'EBUSY' || error.code === 'EPERM') {
      console.log(`无法删除文件：${dir}，可能被占用或没有访问权限`);
    }
  }
};

// 清除指定的文件
const clearDirectory = () => {
  // 需要清除的文件夹路径列表
  const directoryPaths = ['./node_modules', './dist'];

  // 需要清除子文件夹的文件夹列表和其子文件夹名称
  const subDirectories = [{ dir: './packages', subDirs: ['node_modules', 'dist'] }];

  console.log('开始清除...');

  // 清除当前目录的文件夹
  directoryPaths.forEach((dir) => deleteFolderRecursive(dir));

  // 清除指定文件夹中的指定子文件夹
  subDirectories.forEach((folder) => {
    if (!fs.existsSync(folder.dir)) return;

    fs.readdirSync(folder.dir).forEach((file) => {
      const subDirPath = path.join(folder.dir, file);

      if (fs.lstatSync(subDirPath).isDirectory()) {
        folder.subDirs.forEach((subDir) => {
          const subDirPath = path.join(folder.dir, file, subDir);
          deleteFolderRecursive(subDirPath);
        });
      }
    });
  });

  console.log('清除完成！');
};

// 执行清理
clearDirectory();
